<script>
let list = [
        { id: 1, name: '部门A', parentId: 0 },
        { id: 2, name: '部门B', parentId: 0 },
        { id: 3, name: '部门C', parentId: 1 },
        { id: 4, name: '部门D', parentId: 1 },
        { id: 5, name: '部门E', parentId: 2 },
        { id: 6, name: '部门F', parentId: 3 },
        { id: 7, name: '部门G', parentId: 2 },
        { id: 8, name: '部门H', parentId: 4 }
    ];
    function cover(list){
        let res=[]
        const map=list.reduce((res,item)=>(res[item.id]=item,res),{})
        for(let item of list){
            if(item.parentId === 0){
                res.push(item)
                continue
            }
            if(item.parentId in map){
                const parent=map[item.parentId]
                parent.children=parent.children || []
                parent.children.push(item)
            }
        }
        return res
    }
    console.log( cover(list))
</script>